package extractor;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

import trouger.dmt.JoinTableRunner;
import trouger.dmt.JoinType;
import utils.Utils;

public class AttachItemCoec implements Tool{
	
	public static String getItemCoecPath(String date) {
		return Utils.rootDir + date + "/ItemCoec/";
	}
	
	@Override 
	public Configuration getConf() {
		return null;
	}
	
	@Override
	public void setConf(Configuration conf) {
		
	}
	/*
	 * (non-Javadoc)
	 * UserFiltered Table
	 * Path: /group/tbsc-dev/xzwang/clickprediction/$date/ItemCoec/
	  * ---------------------search---------------------
		1.user 32位id
		2.Query 
		3.User 数字id
		4.用户分类
		5.点击时间
		6.搜索的来源（1：TB站外来源，2：TB站内搜索结果页引流，3：TB站内首页用户主动搜索，4：新版搜索首页用户主动搜索，5：新版搜索相关搜索。现在该字段不一定是数字，有可能是域名）
		7.搜索类目
		8.排序,格式一转换
		9.列表模式（大图、小图）
		10.消保筛选
		11.所在地筛选
		12.结果数 01：违禁词过滤造成无结果 02：超时无结果 03：iSearch真实无结果 0：未知原因无结果
		13.第几页
		14.搜索属性
		15.Tab类型 (0:未知，1：所有宝贝，2：人气，3：淘宝商城，4：二手 
		---------------------pv---------------------
	 	16.UUID
	 	17.pv时间
	 	18.直达后类目
	 	19.是否点击
	 	---------------------buyer---------------------
		20.CITY (所在城市)
		21.PROV (所在省份)
		22.RATE_SUM (作为卖家的信用分值，只有当等级发生变迁的时候才更新)
		23.RATE_NUM (作为买家的信用分值，只有当等级发生变迁的时候才更新)
		24.BIRTHDATE (生日)
		25.SUSPENDED (用户状态：0 正常;1 未激活;2 删除;3 冻结;-9 CC) 
		26.USER_SESSION_TIME (用户激活时间) 
		27.USER_LEVERL (用户等级) 
		28.USER_STYLE (收费服务类型(按位取与字段，目前定义的二进制位有 1:alisoft网店版用户 2:b2c商城用户[占用先]))
		29.USER_RANK (用户社区等级，论坛改造后没有在使用。现在还是有使用的,在商品举报的地方,有个小二专用, 中用user_rank来判断小二身份...小二身份=46 by yekai)
		30.USER_GENDER (性别)
		31.BUYER_GOODNUM (作为买家的好评数)
		32.SELLER_GOODNUM (作为卖家的好评数)
		33.BUYER_SUM　　(作为买家的评价分值)
		34.BUYER_NUM (作为买家的评价次数)
		35.SELLER_SUM (作为卖家的评价分值)
		36.SELLER_NUM (作为卖家的评价次数)
		---------------------click---------------------
		37.点击时间
		38.搜索的来源pid
		39.点击位置
		40.点击商品id(数字)
		41.是否为豆腐块商品
		---------------------item---------------------
		42.item[1~34]
		---------------------saler---------------------
		76.CITY(所在城市)
		77.PROV(所在省份)
		78.RATE_SUM(作为卖家的信用分值，只有当等级发生变迁的时候才更新)
		79.RATE_NUM(作为买家的信用分值，只有当等级发生变迁的时候才更新)
		80.BIRTHDATE(生日)
		81.SUSPENDED(用户状态：0
		82.USER_SESSION_TIME(用户激活时间)
		83.USER_LEVERL(用户等级)
		84.USER_STYLE(收费服务类型(按位取与字段，目前定义的二进制位有
		85.USER_RANK(用户社区等级，论坛改造后没有在使用。现在还是有使用的,在商品举报的地方,有个小二专用,
		86.USER_GENDER(性别)
		87.BUYER_GOODNUM(作为买家的好评数)
		88.SELLER_GOODNUM(作为卖家的好评数)
		89.BUYER_SUM(作为买家的评价分值)
		90.BUYER_NUM(作为买家的评价次数)
		91.SELLER_SUM(作为卖家的评价分值)
		92.SELLER_NUM(作为卖家的评价次数
		---------------------shop--------------------
		93.shop[1~22]
		115. pvCount
		116.clickCount
		117.saler 32位id
	 	118.saler coec
	 	119.saler ctr
		120.商品类目名称
		121.商品根类目id
		122.商品根目录名称
		123.Buyer coec
		124.Buyer ctr
		125.category coec
		126.category ctr
		127.root category coec
		128.root category ctr
		129.item coec
		130.item ctr
	 * */	 
	@Override
	public int run(String[] args) throws Exception {
		String itemFile = AuctionItemExtractor.getPvItemDetailPath(args[0]);
		String coecFile = "/group/tbsc-dev/xzwang/clickprediction/cyl/itemFeature/coec";
		
		String output = getItemCoecPath(args[0]);
		System.out.println("start job AttachItemCoecJob...");
		System.out.println("itemFile: " + itemFile);
		System.out.println("coecFile: " + coecFile);
		System.out.println("output: " + output);
		if (Utils.exitSystem(args))
			return -1;
		JoinTableRunner r = new JoinTableRunner();
		r.addSourceTable(itemFile, "UTF-8", "\t");
		r.addSourceTable(coecFile, "UTF-8", "\t");
		r.addKeyGroup("1.42, 2.1");	
		r.setJoinType(JoinType.LeftOuterJoin);
		StringBuilder columns = new StringBuilder();		
		for (int i = 1; i <= 128; ++i) {
			columns.append("1." + String.valueOf(i) + ", ");
		}
		columns.append("2.2,2.3");
		r.setResultFieldsEx(columns.toString());
		r.setResultTable(output);
		r.run("AttachItemCoecJob");
		return 0;		 	
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Utils.checkArgs(args);
		
		// TODO Auto-generated method stub
		int res = ToolRunner.run(new AttachItemCoec(), args);
		System.exit(res);
	}
}